package com.itheima.java8Time;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.Temporal;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;

/**
 * @ClassName: PayDayAdjuster
 * @Description: 假如员工一个月中领工资，发薪日是每月的15号，如果是周末，则调整为周五。
 * 之后会传入一个日期时间对象，判断日期时间对象是不是15号，如果不是15号则修改为15号，
 * 如果是周末，则调整为周五（上一个）
 *
 * LocalDate 是线程安全的LocalDate readPayDay = payDate.withDayOfMonth(day);
 * 修改日期后会生成新的对象，原对象没变。（类似String机制）
 *
 * @author: Yrd
 * @date: 2021-10-13 21:49
 */
public class PayDayAdjuster implements TemporalAdjuster {


    @Override
    public Temporal adjustInto(Temporal temporal) {
        //1.Temporal是日期时间类对象的父接口,实际上可用理解为传入的就是LocalDate或者是LocalTime对象，
        //需要将temporal转换为LocalDate对象
        //System.out.println("temporal:"+temporal);
        LocalDate payDate = LocalDate.from(temporal);
        //2.判断当前封装的时间中的日期是不是当月15号，如果不是则修改15日
        int day;
        if(payDate.getDayOfMonth() != 15){
            day = 15;
        }else {
            day = payDate.getDayOfMonth();
        }
        LocalDate realPayDay = payDate.withDayOfMonth(day);
        //3.判断readPayDay对象中封装的星期数是否是周末，如果是则改为上一个周五.
        if(realPayDay.getDayOfWeek()== DayOfWeek.SUNDAY || realPayDay.getDayOfWeek()==DayOfWeek.SATURDAY){
             realPayDay = realPayDay.with(TemporalAdjusters.previous(DayOfWeek.FRIDAY));
        }
        return realPayDay;
    }
}





















